<?php
/**
 *  
 * @package admin
 * @author Mervin.Wong<mervin0502@163.com>
 * @Copyright
 * @license  http://www.apache.org/licenses/LICENSE-2.0
 * @version 0.1.0
 * @date 2013-2-23下午5:51:09
 *
 */
 
 /**
  * CanGoo Category 模型
  *  分类管理模型
  * @package admin
  * @subpackage  models
  * @author mervin.wong
  */
  
  class Category_model extends CI_Model{
  	
  	/**
  	 * 构造函数
  	 */
  	 public function __construct(){
  	 	parent::__construct();
  	 	$this->load->database();
  	 }
  	 
  	 /**
  	  * 根据tid获取一条记录
  	  * @access public
  	  * @param array $field 字段数组
  	  * @param int $tid
  	  * @return array|bool 成功返回一条记录，否则时false;
  	  */
  	 public function get_one($field, $tid){
  	 	//condtion tid = $tid
  	 	$this->db->select($field);
  	 	$this->db->from('taxonomy');
  	 	$this->db->where('module', 'blog');
		$this->db->where('type', 'category');
		$this->db->where('tid', $tid);
		$query = $this->db->get();
		if($query->num_rows > 0){
			return $query->row_array();
		}else{
			return false;
		}
  	 }
  	 
  	public function get_num($field, $table, $conditions){
 		$this->db->select();
 		$this->db->from($table);
 		if(!empty($conditions)){
 			foreach($conditions as $k=>$v){
 				$this->db->where($k, $v);
 			}
 		}
 		$query = $this->db->get();
 		return $query->num_rows;
 	}
 	
  	 /**
  	  * 获取所有分类的树(二级)，分类ID，分类名
  	  * @access public
  	  * @param string|array $args 查询的字段
  	  * @param array $conditions description
  	  * @return array $tree 分类树
  	  */
  	 public function get_category_tree($args, $conditions, $offset, $limit){
  	 	//id slug parent
       $tree = array();
		$this->db->select($args);
		$this->db->from('taxonomy');
		if(!empty($conditions)){
			foreach($conditions as $k=>$v){
				$this->db->where($k, $v);
			}
		}
		$this->db->limit($limit, $offset);
		$query = $this->db->get();
		if($query->num_rows > 0){
			$rows = $query->result_array();
			foreach($rows as $row){
				if($row['parent'] == 0){
					$tree[$row['tid']]['parent_category'] =  $row;
				}else{
					$tree[$row['parent']]['sub_category'][$row['tid']] = $row; 
				}
			}
			return $tree;			
		}else{
			return false;
		}
  	 } 
  	 
  	 /**
  	  * 插入一个分类
  	  * @access public
  	  * @param array $args 分类的各字段数组
  	  * @return int|bool 成功返回插入的分类的TID，失败是返回false;
  	  */
  	  public function insert($args){
  	  	//如果新加入的分类时默认分类，则将以前的默认分类状态去掉
  	  	if($args['isDefault'] == 1){
  	  		$this->db->select('tid');
  	  		$this->db->from('taxonomy');
  	  		$this->db->where('module', 'blog');
			$this->db->where('type', 'category');
			$this->db->where('isDefault', 1);
			$query = $this->db->get();
			if($query->num_rows > 0){
				$row = $query->row_array();
				$this->db->set('isDefault', 0);
				$this->db->where('tid', $row['tid']);
				$this->db->where('module', 'blog');
				$this->db->where('type', 'category');
				$this->db->update('taxonomy');
/*				if($this->db->affect_rows() == 0){
					//return false;
				}*/
			}
  	  	}
  	  	 $this->db->insert('taxonomy', $args);
  	  	 if($this->db->affected_rows() > 0){
  	  	 	return $this->db->insert_id();
  	  	 }else{
  	  	 	return false;
  	  	 }
  	  }
  	  
  	  /**
  	   * 更新一个分类
  	   * @access public
  	   * @param int $tid 分类ID
  	   * @param array $args 字段值数组
  	   * @return bool description
  	   */
  	  public function update($tid, $args){
  	  	//如果新加入的分类时默认分类，则将以前的默认分类状态去掉
  	  	if($args['isDefault'] == 1){
  	  		$this->db->select('tid');
  	  		$this->db->from('taxonomy');
  	  		$this->db->where('module', 'blog');
			$this->db->where('type', 'category');
			$this->db->where('isDefault', 1);
			$query = $this->db->get();
			if($query->num_rows > 0){
				$row = $query->row_array();
				$this->db->set('isDefault', 0);
				$this->db->where('tid', $row['tid']);
				$this->db->where('module', 'blog');
				$this->db->where('type', 'category');
				$this->db->update('taxonomy');
				/*if($this->db->affect_rows() == 0){
					//return false;
				}*/
			}
  	  	}
  	  	 $this->db->where('tid', $tid);
  	  	 $this->db->update('taxonomy', $args);
  	  	 if($this->db->affected_rows() > 0){
  	  	 	return true;
  	  	 }else{
  	  	 	return false;
  	  	 }  	  	
  	  	
  	  }
  	  
  	 /**
  	  * 删除一个分类，需要考虑该分类下的子分类和文章的从属关系
  	  * @access public
  	  * @param int  $tid 分类ID
  	  * @return 如果删除的时默认分类,返回提示
  	  */ 
  	  public function delete($tid){
	  	$this->db->select(array('tid', 'parent','isDefault'));
	  	$this->db->from('taxonomy');
	  	$this->db->where('tid', $tid);
	  	$query = $this->db->get();
	  	$row1 = $query->row_array();
	  	if($row1['isDefault'] != 1){
	  		//不是默认分类
	  		if($row1['parent'] == 0){
	  			//删除的是一级分类,将文章和子分类放到默认分类下
		  		$this->db->select(array('tid', 'parent'));
		  		$this->db->from('taxonomy');
		  		$this->db->where('module', 'blog');
				$this->db->where('type', 'category');
				$this->db->where('isDefault', 1);
				$query = $this->db->get();
				if($query->num_rows > 0){
					$row2 = $query->row_array();
					//子分类 
					if($row1['tid'] != $row2['parent']){
						$this->db->set('parent', ($row2['parent'] == 0)?$row2['tid']:$row2['parent']);
						$this->db->where('parent', $row1['tid']);
						$this->db->where('module', 'blog');
						$this->db->where('type', 'category');
						$this->db->update('taxonomy');
						/*if($this->db->affect_rows() == 0){
							//return false;
						}*/
						//该分类下的文章
						$this->db->set('tid', $row2['tid']);
						$this->db->where('tid', $row1['tid']);
						$this->db->update('tax_map');
						//删除该条记录
						$this->db->where('tid', $row1['tid']);
						$this->db->delete('taxonomy');
						return true;  
					}else{
						//如果该分类下的子分类中其中一个时默认分类，则不能删除
						return false;
					}
				}	  			
	  		}else{
	  			//删除的是二级分类，将文章放到父类上
				//该分类下的文章
				$this->db->set('tid', $row1['parent']);
				$this->db->where('tid', $tid);
				$this->db->update('tax_map');
				
				//删除该条记录
				$this->db->where('tid', $tid);
				$this->db->delete('taxonomy');
				return true;  
	  		}
  	  	}else{
  	  		//删除默认分类
  	  		return false;
  	  	}
  	  }
  	  
  	  /**
  	   * 设为默认分类
  	   * @access public
  	   * @param int $tid description
  	   * @return 
  	   */
  	  public function set_default_cat($tid){
  		$this->db->select('tid');
  		$this->db->from('taxonomy');
  		$this->db->where('module', 'blog');
		$this->db->where('type', 'category');
		$this->db->where('isDefault', 1);
		$query = $this->db->get();
		if($query->num_rows > 0){
			$row = $query->row_array();
			$this->db->set('isDefault', 0);
			$this->db->where('tid', $row['tid']);
			$this->db->where('module', 'blog');
			$this->db->where('type', 'category');
			$this->db->update('taxonomy');
			/*if($this->db->affect_rows() == 0){
				//return false;
			}*/
		}
		$this->db->set('isDefault', 1);
		$this->db->where('tid', $tid);
		$this->db->where('module', 'blog');
		$this->db->where('type', 'category');
		$this->db->update('taxonomy');  	  	
  	  }
  	  
  	  /**
  	   * 检测某一个字段值是否存在
  	   * @access public
  	   * @param string $value
  	   * @param string $field 字段名
  	   * @return bool 存在返回true
  	   */
  	   public function check($value, $field, $tid){
  	   		$this->db->select($field);
  	   		$this->db->from('taxonomy');
  	   		$this->db->where('module', 'blog');
			$this->db->where('type', 'category');
			$this->db->where($field, $value);
			if($tid != 0){
				$this->db->where('tid !=', $tid);
			}
  	   		$query = $this->db->get();
  	   		if($query->num_rows > 0){
  	   			return true;
  	   		}else{
  	   			return false;
  	   		}
  	   }
  	   
  }
  /* End of file category_model.php */
  /* Location : ./apps/admin/models/blog/category_model.php */
